package com.codewsq;

/**
 * 设计模式：代理模式 -> 静态代理模式
 */
public class StaticProxyTest {
    public static void main(String[] args) {
        Proxy proxy = new Proxy(new RealStar());
        proxy.publicity();
        proxy.bookAVenue();
        proxy.ticketSales();
        proxy.sing();
        proxy.denouement();
    }

}

// 接口
interface Star {

    void publicity(); // 宣传

    void bookAVenue(); // 订场地

    void ticketSales(); // 售票

    void sing(); // 唱歌

    void denouement(); // 收场

}

/**
 * 真实的明星 -- 被代理类
 */
class RealStar implements Star {

    @Override
    public void publicity() {

    }

    @Override
    public void bookAVenue() {

    }

    @Override
    public void ticketSales() {

    }

    @Override
    public void sing() {
        System.out.println("明星：在唱歌");
    }

    @Override
    public void denouement() {

    }
}

/**
 * 代理经纪人 -- 代理类
 */
class Proxy implements Star {

    private Star star;

    public Proxy(Star star) {
        this.star = star;
    }

    @Override
    public void publicity() {
        System.out.println("经纪人：宣传");
    }

    @Override
    public void bookAVenue() {
        System.out.println("经纪人：订场地");
    }

    @Override
    public void ticketSales() {
        System.out.println("经纪人：售票");
    }

    @Override
    public void sing() {
        star.sing(); // 实际的核心表演还是需要真实的明星去表演
    }

    @Override
    public void denouement() {
        System.out.println("经纪人：收场");
    }
}